home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / dxf.h < prev    next >
C/C++ Source or Header  |  1996-06-04  |  6KB  |  249 lines

  1. /*
  2.  * Dxf.h
  3.  *
  4.  * Structures de donn‚es de la norme DXF:
  5.  *
  6.  * Purpose:
  7.  * --------
  8.  * Ce fichier contient toutes les structures de donn‚es n‚cessaires
  9.  * … la gestion de données par la norme Data eXchange Format.
  10.  * 
  11.  * Notes:
  12.  * ------
  13.  * Norme DXF by Fran‡ois PLANQUE & Xavier CANY:
  14.  *
  15.  *        FULC_DIFF
  16.  *                |
  17.  *       RECORD_DIFF
  18.  *                |
  19.  *        RECORD_NUMBER   RECORD_FLAGS
  20.  *                      \        /
  21.  *                  HEAD_STRING                FOOT_STRING
  22.  *               /              \                       /
  23.  *     COMPACT_HEADER          {RECORD_FIELD}
  24.  *             |        
  25.  *  COMPACT_RECORD             COMPACT_FIELD
  26.  *             |
  27.  *      DATA_RECORDS     
  28.  */
  29.                
  30. /*
  31.  * V‚rifie si les pr‚sentes d‚finitions ont d‚ja ‚t‚ faites:
  32.  */
  33. #ifndef _DXF_H_
  34. #define _DXF_H_
  35.                
  36.    
  37.    #include <time.h>            
  38.              
  39. /*
  40.  * FULC_DIFF: Division d'un numero de differenciation d'un Record DXF:
  41.  *
  42.  * Notes:
  43.  * ------
  44.  * Division en 3 variables selon Fulchrom. Peut varier d'une implémentation
  45.  * à l'autre de la norme.
  46.  */
  47. typedef
  48.     struct
  49.     {
  50.         unsigned char            magic;        /* Choisissez votre num‚ro */
  51.         unsigned char            repeat;        /* Au cas ou vous envoyez */
  52.                                                     /*    plusieurs messages … la */
  53.                                                     /*    mˆme seconde */
  54.         int                        random;        /* Nombre al‚atoire */
  55.     }
  56.     FULC_DIFF;
  57.                                  
  58.                                  
  59. /*
  60.  * RECORD_DIFF: Partie du numéro de différentiation d'un record DXF:
  61.  */                        
  62. typedef
  63.     union
  64.     {
  65.         unsigned long            value;        /* Nombre anonyme */
  66.         FULC_DIFF                fulc;            /* Exemple de gestion de Fulchrom */
  67.     }
  68.     RECORD_DIFF;
  69.                                    
  70.                                    
  71. /*
  72.  * RECORD_NUMBER: Num‚ro de diff‚rentiation global d'un record DXF:
  73.  *
  74.  * Purpose:
  75.  * --------
  76.  * Sert … distinguer n'importe quel record de n'importe quel autre
  77.  * … l'‚chelle mondiale.
  78.  *
  79.  * Notes:
  80.  * ------
  81.  * Type qui va etre inclus 2 fois a RECORD_HEAD 
  82.  */              
  83. typedef                        
  84.     struct
  85.     {
  86.         time_t                    date;            /* Date format **IX */
  87.         RECORD_DIFF                diff;            /* No de diff‚renciation */
  88.     } 
  89.     RECORD_NUMBER;
  90.    
  91.  
  92. /*
  93.  * RECORD_FLAGS: Flags qualifiant l'enregistrement
  94.  */
  95. typedef
  96.     struct
  97.     {
  98.         BOOL    b_Private    :    1;        /* Le message est priv‚ (le dest est ds DSTA par exemple) */
  99.         int    n_Junk        :    15;    /* Mettre tout ‡a … 0 */
  100.     }
  101.     RECORD_FLAGS;
  102.     
  103.                
  104. /*
  105.  * HEAD_STRING: HEADER d'un record DXF 
  106.  */
  107. typedef        
  108.     struct
  109.     {
  110.         unsigned long            rec_length;    /* Long totale record */
  111.                 /* (Utile lorsque l'on sauve ou qu'on charge sur disque) */
  112.                 /* Permet egalement de supprimer ou d'ajouter des infos */
  113.         RECORD_NUMBER            rec_idnb;    /* Num‚ro d'identification de l'enregistrement */
  114.         RECORD_NUMBER            ref_idnb;    /* Num‚ro d'identif de la r‚f‚rence */
  115.         RECORD_FLAGS            RecFlags;    /* Flags qualifiant l'enregistrement */
  116.     }
  117.     HEAD_STRING;
  118.  
  119.  
  120. /*
  121.  * FOOT_STRING: FOOTER d'un record DXF 
  122.  *
  123.  * Suggest:
  124.  * --------
  125.  * Inclure un CRC16 ou CRC32 Check optionnel
  126.  */
  127. typedef        /* Chaine du FOOTER */
  128.     struct
  129.     {
  130.         unsigned    int            checksum;    /* Checksum */
  131.     }
  132.     FOOT_STRING;
  133.                                 
  134.  
  135. /*
  136.  * RECORD_FIELD: Champ d'un record DXF NON COMPACTE
  137.  * AVEC pointeur NEXT
  138.  */
  139. typedef
  140.     struct    record_field
  141.     {
  142.         struct record_field    *    next;            /* Pointeur sur le prochain champ */
  143.         unsigned long                field_id;    /* Type de champ */
  144.         size_t                        length;        /* Longueur du champ */
  145.         union                                            /* Informations utiles */
  146.         {
  147.             HEAD_STRING        *    head;        /* Info header */
  148.             unsigned    char    *    string;    /* chaine pple du champ */                    
  149.             FOOT_STRING        *    foot;
  150.         }                                info;
  151.     }
  152.     RECORD_FIELD;
  153.                   
  154.  
  155. /*
  156.  * COMPACT_HEADER: HEADER de Record DXF sous forme compacte:
  157.  *
  158.  * Purpose:
  159.  * --------
  160.  * L'arrangement des donn‚es est ici telles qu'on les trouve
  161.  * sur disque... 
  162.  * Permet de lire le d‚but d'un record sur disque et de d‚terminer
  163.  * la taille m‚moire n‚cessaire pour le stocker sous forme de
  164.  * COMPACT_RECORD
  165.  */
  166. typedef
  167.     struct
  168.     {
  169.         unsigned    long                    head_id;            /* Contient 'HEAD' */
  170.         unsigned long                    head_length;    /* Longueur du header */
  171.         HEAD_STRING                        header;            /* Header */
  172.     }
  173.     COMPACT_HEADER;
  174.                 
  175.  
  176.  
  177. /*
  178.  * COMPACT_FIELD: Champ d'un record DXF COMPACTE
  179.  * Suggest: remplacer tous les compact_headers par ‡a!
  180.  * UNKNOWN SIZE @ COMPILATION
  181.  */
  182. typedef
  183.     struct
  184.     {
  185.         ULONG        UL_FieldId;            /* Type de champ */
  186.         size_t    size_FieldLen;        /* Longueur du champ */
  187.         UBYTE        bytes[];        /* Contenu du champ */
  188.     }
  189.     COMPACT_FIELD;
  190.  
  191.                
  192. /*
  193.  * COMPACT_RECORD: Record DXF sous forme compacte:
  194.  *
  195.  * Purpose:
  196.  * --------
  197.  * L'arrangement des données est ici telles qu'on les trouve
  198.  * sur disque... Chargement/sauvegarde rapides
  199.  * Les FIELDS sont les uns à la suite des autres.
  200.  * Pointeur vers l'avant et l'arriere pour recherche.
  201.  *
  202.  * History:
  203.  * --------
  204.  * 17.05.94: fplanque: ajout des ReadLocks
  205.  * 18.11.94: d‚plac‚ l'union data de taille VARIABLE … la fin... obligatoire ‡a!
  206.  */
  207. typedef
  208.     struct    compact_record
  209.     {
  210.         struct    compact_record        *prev;            /* Record Pr‚c‚dent */
  211.         struct    compact_record        *next;            /* Record Suivant */
  212.         struct    s_reclocks
  213.             {
  214.             int    nb_ReadLocks    : 15;                    /* Nbre de Locks partag‚s sur cet enregistrement */
  215.             int    b_XLock            : 1;                    /* !=0 s'il existe un XLock sur ce champ */
  216.             }                                locks;
  217.         union
  218.             {
  219.             COMPACT_HEADER            header;                /* Header compact‚ (to be removed sooner or later) */
  220.             COMPACT_FIELD            CompactField;        /* Champ compact‚ */
  221.             char                        compact_rec[];        /* Message compact‚ UNKNOWN SIZE AT COMPILATION */
  222.             }                                data;
  223.     }    
  224.     COMPACT_RECORD;
  225.                                   
  226.  
  227. /*
  228.  * DATA_RECORDS: Point d'entr‚e d'une liste chainee de records DXF
  229.  *
  230.  * Purpose:
  231.  * --------
  232.  * AccŠs … une base de donn‚es en m‚moire sous forme d'une liste
  233.  * chaŒn‚e de COMPACT_RECORD 
  234.  */                                  
  235. typedef
  236.     struct
  237.     {
  238.         long                    nb_records;        /* Nbre d'enregistrements */
  239.         COMPACT_RECORD        *first_record;    /* 1er enregistrement */
  240.         COMPACT_RECORD        *last_record;    /* dernier enregistrement */
  241.     }
  242.     DATA_RECORDS;
  243.            
  244.  
  245. /*
  246.  * Fin du test anti red‚finition:
  247.  */
  248. #endif
  249.